if ( !Object.prototype.watch) {
	Object.prototype.watch=function(prop,handler){
		var oldValue = this[prop];
		var newValue = oldValue;
		
		var __getter__ = function(){
			return newValue;
		};
		
		var __setter__ = function(val){
			oldValue = newValue;
			return newValue = handler.call(this,prop,oldValue,newValue);
		};
		
		if (delete this[prop]){
			if(Object.defineProperty){
				Object.defineProperty(this,prop,{get : __getter__ , set : __setter__ });
			}else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__){
				Object.prototype.__defineGetter__.call(this,prop,__getter__);
				Object.prototype.__defineSetter__.call(this,prop,__setter__);
			}
 		}
	};
}

if ( !Object.prototype.unwatch){
	Object.prototype.unwatch = function(prop){
		var value = this[prop];
		delete this[prop];
		this[prop] = value;
	};
}